/**
 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 * $Id$ SecurityBean.java
 * Universidad de los Andes (Bogotá - Colombia)
 * Departamento de Ingeniería de Sistemas y Computación
 * Licenciado bajo el esquema Academic Free License version 2.1
 *
 * Ejercicio: Muebles los Alpes
 * Autor: Camilo Alvarez
 * Autor: David Méndez
 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 */
package com.losalpes.catalogo.beans;

import com.losalpes.catalogo.bos.TipoUsuario;
import com.losalpes.catalogo.bos.Usuario;
import com.losalpes.catalogo.excepciones.AuthenticationException;
import com.losalpes.catalogo.servicios.ISecurityService;
import com.losalpes.catalogo.servicios.SecurityServiceMock;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;

/**
 * Clase que modela el backing bean que se encarga de la seguridad del sistema.
 * @author Camilo Alvarez
 * @author David Méndez
 */

public class SecurityBean {

    // -----------------------------------------------
    // Constantes
    // -----------------------------------------------

     /**
      * Constante que modela el valor de error en la operación de ingreso al sistema.
      */
     private final static String ERROR = "ERROR";

    // -----------------------------------------------
    // Atributos
    // -----------------------------------------------

    /**
     * Login del usuario que esta utilizando el sistema.
     */
    private String username;

    /**
     * Contraseña del usuario que se encuentra utilizando el sistema.
     */
    private String pwd;

    /**
     * Relación con la interfaz que provee los servicios necesarios de seguridad para el sistema.
     */
    private ISecurityService securityService;

    // -----------------------------------------------
    // Constructor
    // -----------------------------------------------

    /**
     * Constructor de la clase. Inicializa los atributos.
     */
    public SecurityBean() {
        securityService = new SecurityServiceMock();
    }

    // -----------------------------------------------
    // Métodos
    // -----------------------------------------------
    
    /**
     * Hace la validacion de ingreso del usuario al sistema.
     * @return tipoUsuario. El tipo de usuario que está utilizando el sistema.
     */
    public String login(){
        try {
            System.out.println(username);
            Usuario user = securityService.login(username, pwd);
            if (user.getTipoUsuario() == TipoUsuario.ADMINISTRADOR) {
                return "indexAdministrador";
            } else {
                return "indexCliente";
            }
        } catch (AuthenticationException ex) {
            FacesContext context = FacesContext.getCurrentInstance();
			String msg = ex.getMessage();
			FacesMessage fm = new FacesMessage(msg);
			fm.setSeverity(FacesMessage.SEVERITY_ERROR);
			context.addMessage(null, fm);
                Logger.getLogger(SecurityBean.class.getName()).log(Level.SEVERE, null, ex);
            return ERROR;
        }
    }

    /**
     * Retorna la contraseña del usuario que se encuentra actualmente en el sistema.
     * @return pwd. Contraseña del usuario que se encuentra actualment en el sistema.
     */
    public String getPwd() {
        return pwd;
    }

    /**
     * Permite asignar la contraseña del usuario que se encuentra actualmente en el sistema.
     * @param pwd. Nueva contraseña.
     */
    public void setPwd(String pwd) {
        this.pwd = pwd;
    }

    /**
     * Retorna el login del usuario que se encuentra actualmente en el sistema.
     * @return username. Login del usuario que se encuentra actualmente en el sistema.
     */
    public String getUsername() {
        return username;
    }

    /**
     * Permite asignar el login del usuario que se encuentra actualmente en el sistema.
     * @param username. Nuevo login.
     */
    public void setUsername(String username) {
        this.username = username;
    }
}